package com.jf.cloud.service.sysmanager.common.db;


import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.TypedQuery;
import java.util.List;

/**
 *分页或者负责的SQL语句 请使用 Jdbc (BaseDao)
 *其他地方建议是用原生态  EntityManager
 *但是 增加或者 修改等操作需要  添加事物才会执行
 */
@Repository("daoSupport")
@Transactional
public class DaoSupport{
//	
//	@PersistenceContext
//	protected EntityManager em;
//	/**
//	 * 清理一级缓存
//	 */
//     void clear(){
//		em.clear();
//	}
//     /**
//      * 刷新当前缓存
//      */
//     public void flush(){
//    	 em.flush();
//     }
//     /**
//      * 刷新 同步缓存和数据库内 记录
//      */
//     public <T> void refresh(T t){
//    	 em.refresh(t);
//     }
//	/**
//	 * 删除 和批量删除
//	 */
//	public <T> void delete(Class<T> entityClass, Object entityid) {
//		delete(entityClass, new Object[]{entityid});
//	}
//	public <T> void delete(Class<T> entityClass, Object[] entityids) {
//		for(Object id : entityids){
//			em.remove(em.getReference(entityClass, id));
//		}
//	}
//	/**
//	 * 按主键 查询
//	 */
//	@Transactional(readOnly=true,propagation=Propagation.NOT_SUPPORTED)
//	public <T> T find(Class<T> entityClass, Object entityId) {
//		return em.find(entityClass, entityId);
//	}
//	/**
//	 * 原生态SQL 语句查询  返回单个对象
//	 */
//	@Transactional(readOnly=true,propagation=Propagation.NOT_SUPPORTED)
//	public <T> T findBySQL(String nativeSql, Class<T> entityClass) {
//		javax.persistence.Query query = em.createNativeQuery(nativeSql, entityClass);
//		return (T)query.getSingleResult();
//	}
//	/**
//	 * Jpql 语句查询  返回单个对象
//	 */
//	@Transactional(readOnly=true,propagation=Propagation.NOT_SUPPORTED)
//	public <T> T findByJPQL(String jpql, Class<T> entityClass) {
//		TypedQuery<T> query = em.createQuery(jpql, entityClass);
//		return query.getSingleResult();
//	}
//	/**
//	 * 原生态SQL 语句查询  返回单个 对象集合
//	 */
//	@Transactional(readOnly=true,propagation=Propagation.NOT_SUPPORTED)
//	public <T> List<T> findListBySQL(String nativeSql, Class<T> entityClass) {
//		javax.persistence.Query query = em.createNativeQuery(nativeSql, entityClass);
//		return (List<T>)query.getResultList();
//	}
//	/**
//	 * 原生态SQL 语句查询  返回单个 对象集合
//	 */
//	@Transactional(readOnly=true,propagation=Propagation.NOT_SUPPORTED)
//	public <T> List<T> findListByJPQL(String jpql, Class<T> entityClass) {
//		TypedQuery<T> query = em.createQuery(jpql, entityClass);
//		return query.getResultList();
//	}
//	/**
//	 * 原生态SQL 语句查询  返回 对象数组 集合
//	 */
//	@Transactional(readOnly=true,propagation=Propagation.NOT_SUPPORTED)
//	public List<Object[]> findListBySQL(String nativeSql) {
//		javax.persistence.Query query = em.createNativeQuery(nativeSql);
//		return (List<Object[]>)query.getResultList();
//	}
//	/**
//	 * 原生态SQL 语句查询  返回 对象数组 集合
//	 */
//	@Transactional(readOnly=true,propagation=Propagation.NOT_SUPPORTED)
//	public List<Object[]> findListByJPQL(String jpql) {
//		javax.persistence.Query query = em.createQuery(jpql);
//		return (List<Object[]>)query.getResultList();
//	}
//	/**
//	 * 保存
//	 */
//	public void save(Object entity) {
//		em.persist(entity);
//	}
//	/**
//	 * TODO  修改对象
//	 * @author ouyang 创建时间：2012-05-28 17:02:39
//	 */
//	public void update(Object entity) {
//		em.merge(entity);
//	}
//	 
//	public EntityManager getEm() {
//		return em;
//	}
}